package educar.alumno;

import java.sql.ResultSet;
import java.sql.SQLException;

import java.sql.PreparedStatement;


import educar.db.*;

public class AlumnoController{
	private static JPA jpa = new JPA();

	public static boolean existe (String dni) {
		try {
			 Alumno alu = getAlumno(dni);
			return true;
		} catch (AlumnoNoEncontrado ex) {
			return false;
		}
	}
	
	/**
	 * Este metodo nos permite agregar un alumno en la base de datos, es decir agregar un 
	 * nuevo registro en la tabla alumno.
	 * @param alumno
	 * @return
	 */
	public static boolean save(Alumno alumno) {
		try {
			getAlumno(alumno.getDni());
			return false;
		} catch (AlumnoNoEncontrado e1) {
			String[] columns = { "dni", "nombre", "apellido", "fecha_nac" };

			PreparedStatement stm = jpa.newRecord(DbConnection.bd+".alumno", columns);

			try {
				stm.setString(1, alumno.getDni());
				stm.setString(2, alumno.getNom());
				stm.setString(3, alumno.getAp());
				stm.setString(4, alumno.getFecha());
				
			} catch (SQLException e) {
				e.printStackTrace();
				return false;
			}

			jpa.create(stm);
			return true;
		}
	}
	
	/**
	 * Con este metodo se elimina un registro de la tabla alumno, que coincide
	 * con el DNI que se pasa como parametro.
	 * @param dni
	 */
	public static void destroy(String dni) {
		jpa.destroy("alumno", "dni", dni);
	}
	
	/**
	 * Retorna una instancia de la clase alumno obteniada de la base de datos.
	 * @param dni
	 * @return
	 * @throws AlumnoNoEncontrado
	 */
	public static Alumno getAlumno(String dni) throws AlumnoNoEncontrado {
		ResultSet rs = null;
		Alumno alumno = null;

		rs = jpa.getByField("alumno", "dni", dni);
		
		try {
			if (rs.next()) {
				alumno = new Alumno(rs.getString(1), rs.getString(2), rs.getString(3),rs.getString(4));
			} else {
				throw new AlumnoNoEncontrado();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return alumno;
	}
	
	/**
	 * Actualiza los datos de un registro en la tabla.
	 * @param column "Nombre de la columna"
	 * @param value "Valor que reemplaza al existente"
	 * @param id "Campo por el cual se identifica"
	 */
	public static void update(String column,String value, String id) {
		jpa.update("alumno", column, value,"dni",id);
	}

}